上個月 PM 跑來問我:「欸,那個 staging 環境的網址打不開,你可以幫我看一下嗎?」
結果就是需要改一下 hosts 檔,把 api.staging.local 指到新的 IP。很簡單對吧?
但接下來我花了 15 分鐘解釋:
/etc/ 底下sudo
localhost 那行最後我還是自己幫他改了。
這種事發生不只一次。每次有新的 SA、FAE 需要改 hosts,就要重新解釋一輪。後來我想,與其每次解釋,不如做一個工具,讓他們複製貼上就好。
於是就有了 hostfile。

直接編輯 /etc/hosts:對工程師來說沒什麼,但對不熟 terminal 的人來說風險很高。少刪一行、多一個空白,DNS 就爛了。
GUI 工具(像 SwitchHosts):功能很完整,但你沒辦法把一個 GUI 操作流程貼到 Slack 上叫人照做。
其他 CLI 工具:各有不同的設計取捨,但在「讓非技術人員安全執行單一指令」這個場景下,大多不是設計重點。
hostfile 只動自己的區塊,你手寫的內容完全不會被碰到:
# 你的東西 — hostfile 不會動
127.0.0.1 localhost
#### hostfile >>>>>
192.168.1.100 web.local api.local
#### hostfile <<<<<
就算 hostfile 出了什麼問題,最多就是 managed block 裡面的東西壞掉,你原本的設定不受影響。
臨時要關掉某個 domain?hostfile disable api.local。要開回來?hostfile enable api.local。不用重新輸入 IP,不用記得之前的設定。
這個是我後來加的,但用起來超方便:
# 匯出成 JSON
hostfile show --json
# {"192.168.1.100": ["web.local", "api.local"]}
# 從 JSON 匯入
echo '{"10.0.0.1":["db.local"]}' | hostfile merge -
# 跨機器同步
hostfile show --json | ssh another-machine hostfile apply -
apply 和 merge 都會先驗證格式,壞掉的 JSON、不合法的 IP 會直接被擋下來,不會動到 hosts 檔。
hostfile 會自己嘗試 sudo(Linux/macOS)或 gsudo(Windows),使用者不需要記得要打 sudo。
# 叫 PM 跑這一行就好
hostfile add 192.168.1.100 web.local api.local
# 切換環境前先存檔
hostfile save before-migration
# 出事了,一秒還原
hostfile load before-migration
# 看目前設定
hostfile show
# 全部清掉重來
hostfile clean
最常見的用法就是:工程師在 Slack 上貼一行 hostfile add ...,對方複製貼上按 Enter,搞定。
# macOS / Linux
brew install vulcanshen/tap/hostfile
# 或一行安裝
curl -fsSL https://raw.githubusercontent.com/vulcanshen/hostfile/main/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/vulcanshen/hostfile/main/install.ps1 | iex
也有 .deb、.rpm、Scoop 可以用,詳細看 README。
這不是什麼改變世界的工具,就是解決一個很小但很煩的問題。如果你也常常需要幫別人改 hosts 檔,試試看吧。
GitHub: vulcanshen/hostfile